import os


def open_file():
    # 文件打开函数返回文件操作对象。文件名参数可用当前路径，也可用绝对路径。mode默认r。encoding默认GBK。
    # 常用打开方式r：只读（文件不存在会报错）、w：只写（文件存在会被清空，不存在会创建）、a：追加（文件存在位置指针会移到文件末尾，不存在会创建，只可写）
    # r+：读写（文件不存在会报错）、w+：读写（文件存在会被清空，不存在会创建）、a+：追加式读写（文件存在位置指针会移到文件末尾，不存在会创建，可读可写）
    file = open("file1", mode="w+", encoding="utf-8")  # 注意有时需加文件后缀，具体要看在python中显示的是什么
    # 绝对路径写法：file=open("C:\\Users\\17205\\PycharmProjects\\day7\\file1",mode="w+",encoding="utf-8")
    file.write("999")  # 文件写入方法
    file.close()  # 文件关闭方法


def read_file():
    file = open("file1", mode="r", encoding="utf-8")
    file.seek(2)
    data = file.read()  # read方法默认把位置指针后的所有内容一次性读取到内存，也可以指定读取多少字节数的内容：file.read(3)
    print(data)
    data = file.readline()  # readline方法默认可以一次读取位置指针后的一行内容执行后位置指针移动到下一行开头，也可以指定读取多少字节数的内容：file.readline(3)
    print(data)
    file.close()


def seek_file():
    file = open("file1", mode="r", encoding="utf-8")
    file.seek(3, 0)  # seek方法移动位置指针，seek(offset, whence )：offset表偏移量（单位字节）、whence表相对位置（0表开头（默认），1表当前位置，2表末尾）
    # seek方法文本模式下使用限制：相对0时，偏移量只能是非负数。相对于1和2时，偏移量只能是0。汉字偏移要是3的倍数（一般每个汉字为3字节）。在二进制模式下没有此限制
    print(file.readline())
    file.close()
    file = open("file1", mode="rb")  # 文件在二进制模式下（加b）打开(不需要编码参数)：rb、rb+、wb、wb+……
    file.seek(-3, 2)  # 另一正规格式file.seek(-3,os.SEEK_END)此时需先导入os模块
    print(file.readline())
    file.close()


def manag_file():  # 文件的管理操作，需导入os模块
    os.rename("file1", "file2")  # 重命名:os.rename(源文件名, 目标文件名)源文件若找不到会报错
    os.remove("file2")  # remove只能删除普通文件，不能删除文件夹（目录），找不到会报错


if __name__ == '__main__':
    open_file()
    read_file()
    seek_file()
    manag_file()
